package main

import (
	"fmt"
)

//评测题目: 1
// 输入一个正整数 target ，输出所有和为 target 的连续正整数序列（至少含有两个数）。
// 序列内的数字由小到大排列，不同序列按照首个数字从小到大排列。
// 输入：target = 9
// 输出：[[2,3,4],[4,5]]
// 输入：target = 15
// 输出：[[1,2,3,4,5],[4,5,6],[7,8]]


func GetIntList(num int) [][]int {
	ans := [][]int{}
	fn := func(set []int) {
		ans = append(ans, set)
	}
	process(num, 1, []int{}, fn)
	return ans
}

func process(num, start int, path []int, fn func(set []int)){
	if start > num {return}
	if GetSum(path) == num && IsUnion(path) {
		copyPath := make([]int, len(path))
		copy(copyPath, path)
		fn(copyPath)
		return
	}
	for i:=start; i<num; i++ {
		path = append(path, i)
		process(num, i+1, path, fn)
		path = path[:len(path)-1]
	}
}

func GetSum(path []int) int {
	var sum int
	for i:=0; i<len(path); i++ {
		sum += path[i]
	}
	return sum
}

func IsUnion(path []int) bool {
	for i:=1; i<len(path); i++{
		if path[i] != path[i-1]+1 {
			return false
		}
	}
	return true
}

func main() {
	//评测题目: 1
	// 输入一个正整数 target ，输出所有和为 target 的连续正整数序列（至少含有两个数）。
	// 序列内的数字由小到大排列，不同序列按照首个数字从小到大排列。
	// 输入：target = 9
	// 输出：[[2,3,4],[4,5]]
	// 输入：target = 15
	// 输出：[[1,2,3,4,5],[4,5,6],[7,8]]
	fmt.Println(GetIntList(15))
}




